package demo1;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Error {

        public static int ay(){
            int [] array={1,5,6};
            return array[10];
        }
        public static  void  main1(String[] args){
            try{
              int a=ay();
              System.out.println(a+"ffff");
                System.out.println("结束了");
            }catch (ArrayIndexOutOfBoundsException e){
                e.printStackTrace();
                System.out.println("捕获到数组越界");
            }
        }
        public static int test1(){
            try{
                return 10;
            }catch (InputMismatchException e){
                e.printStackTrace();
                System.out.println("捕获到错误了");
            }
            finally {
                System.out.println("finally必须执行-----");
                return 30;
            }
        }
        public static void main2(String[]args){
            int b=test1();
            System.out.println("函数结果是"+b);
        }
        public static int test2() {
            try (Scanner sc = new Scanner(System.in)) {
                int m = sc.nextInt();
                return m;
            } catch (InputMismatchException e) {//捕获输入类型错误
                e.printStackTrace();
            } finally {
             //一般用于关闭资源
            }
            System.out.println("try-catch后的代码------");//输入有错才会执行此处代码，否则正常输出不会执行此行代码
            return 0;
        }
        public static void main3(String[] args){
            System.out.println("输入一个数：");
           int n= test2();
            System.out.println("输入结果为"+n);
        }
        public static void main4(String[]args){
            int[] array={1,2,3,3};
            try{
                System.out.println(array[21]);//异常一个一个的对照执行，此处发生异常，就到执行到捕获处，捕获异常后停止执行，后面的异常就没触发
                array=null;
                System.out.println("数组长度是"+array.length);
            }catch (NullPointerException e){
                System.out.println("处理NullPointerException异常------");//子类异常在父类异常之前
                e.printStackTrace();
            }catch (Exception e) {
                System.out.println("处理非NullPointerException异常------");
                e.printStackTrace();
            }
            finally {
                System.out.println("不论发生任何异常，一定会执行finally里的内容------");
            }
            System.out.println("over------");
        }
        public static void main5(String[] args){
            int [] array={4,5,6,7};
            try{
                System.out.println(array[10]);
                array=null;
            }catch(ArrayIndexOutOfBoundsException|NullPointerException e){//捕获出现的两种异常或其一，用|分割
                System.out.println("处理了ArrayIndexOutOfBoundsException与NullPointerException的异常------");
                e.printStackTrace();
            }finally {
                System.out.println("over-------");
            }
        }
        public static void main6(String[] args){
            int [] array1={6,7,8,9};
            try{
                System.out.println(array1[10]);
                array1=null;
            }catch (ArrayIndexOutOfBoundsException e){
                System.out.println("处理了ArrayIndexOutOfBoundsException异常------");
            }
            catch(NullPointerException e){
                System.out.println("处理了NullPointerException异常------");
            }
            finally {
                System.out.println("finally必须执行------");
            }
        }
        public static void test7(int a) throws CloneNotSupportedException{ /*声明异常后可在本方法中处理也可以留给调用者处理（1.try-catch方法2.继续throws丢给上层
            若调用者为main但仍然没有处理，jvm会接手，遇到这个异常就报错，未遇到照常执行）*/
            if(a==10){
                throw new  CloneNotSupportedException();//抛出异常
            }
        }
        public static void main7(String[] args){
            try{
                test7(10);
            }catch (CloneNotSupportedException e){
                System.out.println("捕获处理了异常------");
            }
            System.out.println("程序可以正常运行------");
        }
        public static void main8(String [] args) throws CloneNotSupportedException,NullPointerException{
            Person p=new Person("haha");
            Person p2=(Person) p.clone();
            System.out.println(p2.name);//实现了Cloneable接口，所以不会遇到异常，jvm不会中断程序
        }
}
